package j03zuoye;
/*
动物园
3. 某某市动物园因疫情防控原因，每日只能接待1000名游客(即每天只有1000张票)，有3个售票窗口进行售票。窗口卖出去一张票之后，要打印"窗口X卖出一张票，当前剩余xxx张票"，其中"窗口X"是每个窗口的名称(即:线程名)。

   > 3个窗口的名字分别是 窗口A, 窗口B, 窗口C

   (1) 在com.hualan.main包里创建一个SellTicketTest类，在类的main方法中完成售票功能

   (2) 通过Thread子类的方式实现一遍售票功能，Thread子类创建在com.hualan.task包里

   (3) 通过Runnable实现类的方式实现一遍, Runnable子类创建在com.hualan.runnable包里
 */
class SaleWindow extends Thread{
    public SaleWindow(String name) {
        super(name);
    }

    @Override
    public void run() {
       Z3piao.sale();
    }
}
public class Z3piao {
    static int num = 1000;
    public static void main(String[] args) {
        SaleWindow tA = new SaleWindow("窗口A");
        Thread tB = new Thread("窗口B"){
            @Override
            public void run() {
                sale();
            }
        };
//        Thread tC = new Thread(()->{
//            sale();
//        },"窗口C");
        Thread tC = new Thread(Z3piao::sale,"窗口C");
        tA.start();
        tB.start();
        tC.start();
    }

    static void sale(){
        while (Z3piao.num>0){
            synchronized (Z3piao.class){
                if(Z3piao.num==0){
                    return;
                }
                Z3piao.num--;
                System.out.println(Thread.currentThread().getName()+"卖出一张票，当前剩余"+Z3piao.num+"张票");
            }
        }
    }
}
